﻿
namespace LM.InterfacesFabricas.Utilidades
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    public class ConversorDeObjetos
    {
            public static T Copie<T>(object objetoOrigem)
            {
                var novoObjeto = Activator.CreateInstance(typeof(T));
                if (objetoOrigem == null)
                {
                    return default(T);
                }

                var propriedades = objetoOrigem.GetType().GetProperties();
                foreach (var prop in propriedades)
                {
                    var propriedadeDestino = novoObjeto.GetType().GetProperty(prop.Name);

                    if (propriedadeDestino != null)
                    {
                        propriedadeDestino.SetValue(novoObjeto, prop.GetValue(objetoOrigem, null), null);
                    }
                    
                }

                return (T)novoObjeto;
            }

            public static IList<TDestino> Copie<TDestino, TOrigem>(IList<TOrigem> lista)
            {
                return lista.Select(objOrigem => Copie<TDestino>(objOrigem)).ToList();
            }
    }
}
